// time.js

/**
 * 生成唯一的应用程序ID，格式为：YYYYMMDDHHMMSS_mmm_{fileType}_{fileName} 或 YYYYMMDDHHMMSS_mmm
 * @param {boolean} flag - 是否包含文件类型和文件名
 * @param {Object} file - 文件对象，包含 type 和 name 属性
 * @returns {string} 生成的唯一ID
 */
function generateApplicationId(flag, file) {
	const now = new Date();
	const year = now.getFullYear().toString().padStart(4, '0');
	const month = (now.getMonth() + 1).toString().padStart(2, '0');
	const day = now.getDate().toString().padStart(2, '0');
	const hours = now.getHours().toString().padStart(2, '0');
	const minutes = now.getMinutes().toString().padStart(2, '0');
	const seconds = now.getSeconds().toString().padStart(2, '0');
	const milliseconds = now.getMilliseconds().toString().padStart(3, '0');

	if (flag) {
		// 包含文件类型和文件名
		const fileType = file.type || 'unknown';
		const fileName = file.name || 'unknown';

		return `${year}${month}${day}${hours}${minutes}${seconds}_${milliseconds}_${fileType}_${fileName}`;
	} else {
		return `${year}${month}${day}${hours}${minutes}${seconds}_${milliseconds}`;
	}
}

/**
 * 获取当前时间的格式化字符串，格式为：YYYY-MM-DD HH:MM:SS
 * @returns {string} 当前时间的格式化字符串
 */
function generateTime() {
	const now = new Date();
	const year = now.getFullYear().toString().padStart(4, '0');
	const month = (now.getMonth() + 1).toString().padStart(2, '0');
	const day = now.getDate().toString().padStart(2, '0');
	const hours = now.getHours().toString().padStart(2, '0');
	const minutes = now.getMinutes().toString().padStart(2, '0');
	const seconds = now.getSeconds().toString().padStart(2, '0');
	return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

/**
 * 获取当前时间的时间戳（毫秒）
 * @returns {number} 当前时间的时间戳
 */
function getCurrentTimestamp() {
	return Date.now();
}

/**
 * 格式化时间戳为指定格式的字符串
 * @param {number} timestamp - 时间戳（毫秒）
 * @returns {string} 格式化后的时间字符串，格式为：YYYY-MM-DD HH:MM:SS
 */
function formatTimestamp(timestamp) {
	const date = new Date(timestamp);
	const year = date.getFullYear().toString().padStart(4, '0');
	const month = (date.getMonth() + 1).toString().padStart(2, '0');
	const day = date.getDate().toString().padStart(2, '0');
	const hours = date.getHours().toString().padStart(2, '0');
	const minutes = date.getMinutes().toString().padStart(2, '0');
	const seconds = date.getSeconds().toString().padStart(2, '0');
	return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

/**
 * 计算两个日期之间的天数
 * @param {string} startDate - 开始日期，格式为：YYYY-MM-DD
 * @param {string} endDate - 结束日期，格式为：YYYY-MM-DD
 * @returns {number} 两个日期之间的天数
 */
function calculateDaysBetween(startDate, endDate) {
	const start = new Date(startDate);
	const end = new Date(endDate);
	const millisecondsPerDay = 1000 * 60 * 60 * 24;
	return Math.floor((end - start) / millisecondsPerDay);
}

/**
 * 获取指定天数后的日期
 * @param {number} days - 要增加的天数
 * @returns {string} 计算后的日期，格式为：YYYY-MM-DD
 */
function getFutureDate(days) {
	const now = new Date();
	now.setDate(now.getDate() + days);
	const year = now.getFullYear().toString().padStart(4, '0');
	const month = (now.getMonth() + 1).toString().padStart(2, '0');
	const day = now.getDate().toString().padStart(2, '0');
	return `${year}-${month}-${day}`;
}

// 导出所有的函数
export{
	generateApplicationId,
	generateTime,
	getCurrentTimestamp,
	formatTimestamp,
	calculateDaysBetween,
	getFutureDate
};